home *** CD-ROM | disk | FTP | other *** search
/ WINMX Assorted Textfiles / Ebooks.tar / Text - Mathematics - Numerical Mathematics and Computing (F).zip / brthdy.f < prev    next >
Text File  |  2002-06-11  |  2KB  |  62 lines

  1. C
  2. C PAGE 352-354: NUMERICAL MATHEMATICS AND COMPUTING, CHENEY/KINCAID, 1985
  3. C
  4. C FILE: BRTHDY.FOR
  5. C
  6. C BIRTHDAY PROBLEM SIMULATION (PROB,BRTHDY,RANDOM)
  7. C
  8. C   REPEATED BIRTHDAY PROBLEM - SUPPOSE THERE ARE N PEOPLE IN A ROOM. 
  9. C   WHAT IS THE PROBABILITY THAT ANY TWO OF THESE PEOPLE WILL HAVE THE
  10. C   SAME BIRTHDAY.  USING A RANDOM NUMBER GENERATOR TO SIMULATE 
  11. C   BIRTHDAYS, THIS PROGRAM CALCULATES THE PROBABILITY OF REPEATED
  12. C   BIRTHDAYS 
  13. C
  14.       L = 256     
  15.       DO 2 N = 5,55,5 
  16.       IF(N .EQ. 25) THEN    
  17.         DO 3 K = 22,23
  18.         VALUE = PROB(K,L) 
  19.         PRINT *,'PROBABILITY AT', K,' IS ',VALUE
  20.    3  CONTINUE
  21.         END IF
  22.       VALUE = PROB(N,L)     
  23.       PRINT *,'PROBABILITY AT ', N,' IS ',VALUE 
  24.    2  CONTINUE
  25.       STOP
  26.       END 
  27.   
  28.       REAL FUNCTION  PROB(N,L)
  29.       LOGICAL  BRTHDY,COINCD
  30.       DATA  M/1000/ 
  31.       SUM = 0.0 
  32.       DO 2 I = 1,M
  33.         COINCD = BRTHDY(N,L)
  34.         IF (COINCD)  SUM = SUM + 1.0  
  35.    2  CONTINUE    
  36.       PROB = SUM/REAL(M)    
  37.       RETURN
  38.       END 
  39.   
  40.       LOGICAL FUNCTION  BRTHDY(N,L)   
  41.       LOGICAL  DAYS(365)    
  42.       DO 2 I = 1,365
  43.         DAYS(I) = .FALSE.   
  44.    2  CONTINUE    
  45.       DO 3 I = 1,N
  46.         NUMBER = 365.0*RANDOM(L) + 1.0
  47.         IF(DAYS(NUMBER))  THEN
  48.           BRTHDY = .TRUE.   
  49.           RETURN
  50.         END IF
  51.         DAYS(NUMBER) = .TRUE. 
  52.    3  CONTINUE    
  53.       BRTHDY = .FALSE.      
  54.       RETURN
  55.       END 
  56.   
  57.       FUNCTION RANDOM(L)
  58.       L = MOD(16807*L,2147483647)
  59.       RANDOM = REAL(L)*4.6566128752458E-10      
  60.       RETURN
  61.       END 
  62.